# 数据类型
"""
Number(数值型，含整数、浮点数、复数等，也就是说没有 int、float等关键字了，统一是 Number);
String(字符串型，含字符和字符串，没有 char 关键字);
Boolean(布尔值，true、false);
None(空值);

list();
tuple();
set();
dict();
"""


# 标识符
"""
只能由数字、字母、下划线组成，字母不能开头，区分大小写。虽然某些字符也可以放在标识符里面，但我们自己不要这样用。

定义一个变量时，应该给一个初始值，依据此初始值来分配内存空间。

变量类型
type(变量) 这里会得到底层的类型，比如 <class 'int'>，<class 'float'>，<class 'str'>等；

变量地址
id(变量) 首地址编号，十进制的值。

下面的用法是可以的。
index = 11
print(index)
index = 'helloworld'
print(index)

清理变量
del index
之后就不能再直接使用 index 了，会报错，变成未定义的了。

index = 11
print(index)
index = None
print(index) 不会报错，会打印 None。


类型转换
int(); 取整数部分，或者称为向下取整，不会进行四舍五入；
    int("123") => 123
    int("123.123") => 123
    int("abc") 报错
    int("123abc") 还是报错
    int("+123") => 123
    int("12+3") 报错
float(); 转为浮点数；1 会得到 1.0；
    float("123.123") => 123.123


查看内置关键字
import keyword
print(keyword.kwlist)
"""

num1 = 11
num2 = 11

# num1和num2的地址值一致
print(id(num1))
print(id(num2))

num1 = 12
print(id(num1))     # num1的地址值变化了，也就是和num2的地址值不一样了
print(id(num2))     # num2的地址值和它自己之前的一致；

num2 = 12
print(id(num1))
print(id(num2))     # num2的地址值上一步相比发生了变化，而且，此时和num1的一致；这就有点引用的意味了；


num3 = num4 = 22
# num3和num4的地址值一致
print(id(num3))
print(id(num4))
num3 = 33
print(id(num3))     # num3的地址值发生变化
print(id(num4))     # num4的地址值保持不变
